#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,stk[51],top = 0; //栈顶元素
    cin >> n;
    // 奇数
    if(n % 2) cout << -1;
    else{
        // 进制转化
        while(n){
            stk[++top] = n % 2;
            n /= 2;
        }
        while(top){ // top > 0
            if(stk[top]){  // pow返回的是double类型.
                cout << (int)pow(2,top - 1) << " ";
            }
            top--;  // 出栈.
        }
    }
    return 0;
}
/*
优秀的拆分 - 从大到小输出
n 被分解为了若干个不同的 2 的正整数次幂
10 = 8 + 2  优秀
7 = 4 + 2 + 1 不优秀  2^0 = 1
6 = 4 + 2 优秀
6 = 2 + 2 + 2 不优秀  每个数互不相同

奇数 肯定不行 2 ^ 0 = 1
偶数 - 二进制拆分 - 输出权重.

其中30分 只需要输出-1即可
60分 看数据范围,拿部分分
//奇数 
if(n%2==1){
    cout<<-1;
    return 0;
}
//小于等于10的偶数
if(n==2) cout<<2;
else if(n==4) cout<<4;
else if(n==6) cout<<4<<" "<<2;
else if(n==8) cout<<8;
else if(n==10) cout<<8<<" "<<2;
else{//n为2的整数次幂 
    cout<<n;
}
满分 - 从大的往小的倒序输出. 验证2的次幂 比起小,则输出
for(int i=30;i>=1;i--){
    int ans=pow(2,i);
    if(ans<=n){
        cout<<ans<<" ";
        n-=ans;
    }	
} 
*/ 
